home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / include / RCS / bit.h,v < prev    next >
Encoding:
Text File  |  1991-07-27  |  3.9 KB  |  182 lines

  1. head     1.5;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.5
  10. date     91.07.26.17.13.33;  author mendel;  state Exp;
  11. branches ;
  12. next     1.4;
  13.  
  14. 1.4
  15. date     89.06.23.11.29.36;  author rab;  state Exp;
  16. branches ;
  17. next     1.3;
  18.  
  19. 1.3
  20. date     88.07.28.17.22.25;  author ouster;  state Exp;
  21. branches ;
  22. next     1.2;
  23.  
  24. 1.2
  25. date     88.07.22.15.39.31;  author ouster;  state Exp;
  26. branches ;
  27. next     1.1;
  28.  
  29. 1.1
  30. date     88.06.21.09.36.46;  author ouster;  state Exp;
  31. branches ;
  32. next     ;
  33.  
  34.  
  35. desc
  36. @@
  37.  
  38.  
  39. 1.5
  40. log
  41. @Added function prototypes
  42. @
  43. text
  44. @/*
  45.  * bit.h --
  46.  *
  47.  *    Definition of macros for setting and clearing bits in an array
  48.  *    of integers.
  49.  *
  50.  *    It is assumed that "int" is 32 bits wide.
  51.  *
  52.  * Copyright 1987, 1988 Regents of the University of California
  53.  * Permission to use, copy, modify, and distribute this
  54.  * software and its documentation for any purpose and without
  55.  * fee is hereby granted, provided that the above copyright
  56.  * notice appear in all copies.  The University of California
  57.  * makes no representations about the suitability of this
  58.  * software for any purpose.  It is provided "as is" without
  59.  * express or implied warranty.
  60.  *
  61.  * $Header: /sprite/src/lib/include/RCS/bit.h,v 1.4 89/06/23 11:29:36 rab Exp Locker: mendel $ SPRITE (Berkeley)
  62.  */
  63.  
  64. #ifndef _BIT
  65. #define _BIT
  66.  
  67. #ifndef _SPRITE
  68. #include "sprite.h"
  69. #endif
  70. #include <cfuncproto.h>
  71. #include <bstring.h>
  72.  
  73. #define BIT_NUM_BITS_PER_INT    32
  74. #define BIT_NUM_BITS_PER_BYTE    8
  75.  
  76. #define Bit_NumInts(numBits)    \
  77.     (((numBits)+BIT_NUM_BITS_PER_INT -1)/BIT_NUM_BITS_PER_INT)
  78.  
  79. #define Bit_NumBytes(numBits)    \
  80.     (Bit_NumInts(numBits) * sizeof(int))
  81.  
  82. #define Bit_Alloc(numBits, bitArrayPtr)      \
  83.         bitArrayPtr = (int *) malloc((unsigned) Bit_NumBytes(numBits)); \
  84.         Bit_Zero((numBits), (bitArrayPtr))
  85.  
  86. #define Bit_Free(bitArrayPtr)    \
  87.         free((char *)bitArrayPtr)
  88.  
  89. #define Bit_Set(numBits, bitArrayPtr) \
  90.     ((bitArrayPtr)[(numBits)/BIT_NUM_BITS_PER_INT] |= \
  91.         (1 << ((numBits) % BIT_NUM_BITS_PER_INT)))
  92.  
  93. #define Bit_IsSet(numBits, bitArrayPtr) \
  94.     ((bitArrayPtr)[(numBits)/BIT_NUM_BITS_PER_INT] & \
  95.         (1 << ((numBits) % BIT_NUM_BITS_PER_INT)))
  96.  
  97. #define Bit_Clear(numBits, bitArrayPtr) \
  98.     ((bitArrayPtr)[(numBits)/BIT_NUM_BITS_PER_INT] &= \
  99.         ~(1 << ((numBits) % BIT_NUM_BITS_PER_INT)))
  100.  
  101. #define Bit_IsClear(numBits, bitArrayPtr) \
  102.     (!(Bit_IsSet((numBits), (bitArrayPtr))))
  103.  
  104. #define Bit_Copy(numBits, srcArrayPtr, destArrayPtr) \
  105.     bcopy((char *) (srcArrayPtr), (char *) (destArrayPtr), \
  106.         Bit_NumBytes(numBits))
  107.  
  108. #define Bit_Zero(numBits, bitArrayPtr) \
  109.     bzero((char *) (bitArrayPtr), Bit_NumBytes(numBits))
  110.  
  111. extern int      Bit_FindFirstSet _ARGS_((int numBits, int *arrayPtr));
  112. extern int      Bit_FindFirstClear _ARGS_((int numBits, int *arrayPtr));
  113. extern Boolean      Bit_Intersect _ARGS_((int numBits, int *src1Ptr, int *src2Ptr, int *destPtr));
  114. extern Boolean       Bit_Union _ARGS_((int numBits, int *src1Ptr, int *src2Ptr, int *destPtr));
  115. extern Boolean       Bit_AnySet _ARGS_((int numBits, int *maskPtr));
  116. extern int        *Bit_Expand _ARGS_((int newNumBits, int oldNumBits, int *oldBitPtr));
  117.      
  118. #endif /* _BIT */
  119. @
  120.  
  121.  
  122. 1.4
  123. log
  124. @*** empty log message ***
  125. @
  126. text
  127. @d18 1
  128. a18 1
  129.  * $Header: /sprite/src/lib/include/RCS/bit.h,v 1.3 88/07/28 17:22:25 ouster Exp Locker: rab $ SPRITE (Berkeley)
  130. d27 2
  131. d68 6
  132. a73 6
  133. extern int      Bit_FindFirstSet();
  134. extern int      Bit_FindFirstClear();
  135. extern Boolean      Bit_Intersect();
  136. extern Boolean       Bit_Union();
  137. extern Boolean       Bit_AnySet();
  138. extern int        *Bit_Expand();
  139. @
  140.  
  141.  
  142. 1.3
  143. log
  144. @Lint.
  145. @
  146. text
  147. @d18 1
  148. a18 1
  149.  * $Header: bit.h,v 1.2 88/07/22 15:39:31 ouster Exp $ SPRITE (Berkeley)
  150. d73 1
  151. a73 1
  152. #endif _BIT
  153. @
  154.  
  155.  
  156. 1.2
  157. log
  158. @Exterminate Mem_Alloc usage.
  159. @
  160. text
  161. @d18 1
  162. a18 1
  163.  * $Header: bit.h,v 1.1 88/06/21 09:36:46 ouster Exp $ SPRITE (Berkeley)
  164. d38 1
  165. a38 1
  166.         bitArrayPtr = (int *) malloc(Bit_NumBytes(numBits)); \
  167. @
  168.  
  169.  
  170. 1.1
  171. log
  172. @Initial revision
  173. @
  174. text
  175. @d18 1
  176. a18 1
  177.  * $Header: bit.h,v 1.1 88/06/19 14:34:52 ouster Exp $ SPRITE (Berkeley)
  178. d38 1
  179. a38 1
  180.         bitArrayPtr = (int *)Mem_Alloc(Bit_NumBytes(numBits)); \
  181. @
  182.